#!/bin/bash
################################################################################
# FurryOS Master Build System v8.0
# "I designed the OS, and AI wrote the code."
#
# CHANGES v8:
# - Fixed missing live border Python script (full code restored)
# - Everything else from v7: Debian 13 trixie, kernel 6.12 LTS, full assets, modes
################################################################################

set -e
set -o pipefail
set -u

# --- CONFIGURATION ---
readonly OS_NAME="FurryOS"
readonly VERSION="8.1.0"
readonly DEBIAN_RELEASE="trixie"  # Debian 13 stable
readonly ARCH="amd64"
readonly DATE=$(date +%Y%m%d-%H%M)
readonly BUILD_LOG="build-${DATE}.log"
readonly WORK_DIR="$(pwd)"
readonly PARENT_DIR="$(dirname "$WORK_DIR")"
readonly BUILD_OUTPUT_DIR="$PARENT_DIR/FurryOS-Builds"

# Detect Real User (for backup paths)
readonly REAL_USER="${SUDO_USER:-$USER}"
readonly REAL_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6)
readonly BACKUP_DIR="$REAL_HOME/Documents/FurryOS_Sourcecode"

# --- LOGGING ---
log_info() { echo -e "\033[0;34m[INFO]\033[0m ${*}" | tee -a "$BUILD_LOG"; }
log_success() { echo -e "\033[0;32m[SUCCESS]\033[0m ${*}" | tee -a "$BUILD_LOG"; }
log_error() { echo -e "\033[0;31m[ERROR]\033[0m ${*}" | tee -a "$BUILD_LOG"; }

# --- CHECKS ---
if [ "$EUID" -ne 0 ]; then
    log_error "Must run as root: sudo ./build8.sh"
    exit 1
fi

# --- CLEANUP ---
log_info "Cleaning environment..."
umount -lf chroot/dev/pts 2>/dev/null || true
umount -lf chroot/dev 2>/dev/null || true
umount -lf chroot/proc 2>/dev/null || true
umount -lf chroot/sys 2>/dev/null || true

lb clean --purge 2>&1 | tee -a "$BUILD_LOG"
rm -f *.iso *.iso.* 2>/dev/null || true
rm -rf config/package-lists config/includes.chroot config/hooks

# --- CONFIGURE ---
log_info "Configuring Live-Build for Debian 13 (trixie)..."
lb config \
    --distribution "$DEBIAN_RELEASE" \
    --architecture "$ARCH" \
    --archive-areas "main contrib non-free non-free-firmware" \
    --security true \
    --updates true \
    --backports false \
    --bootappend-live "boot=live components quiet splash hostname=furryos persistence username=anthro" \
    --linux-packages "linux-image linux-headers" \
    --iso-volume "${OS_NAME}_${VERSION}" \
    --iso-application "$OS_NAME" \
    --iso-publisher "Anthro Entertainment LLC" \
    --memtest none \
    --checksums sha256 \
    2>&1 | tee -a "$BUILD_LOG"

echo 'LB_MKSQUASHFS_OPTIONS="-no-xattrs"' >> config/binary

# --- DEFINE PACKAGES ---
log_info "Defining minimal packages (MATE from Debian 13 stable)..."
mkdir -p config/package-lists
LIST_FILE="config/package-lists/furryos-base.list.chroot"

echo "mate-desktop-environment-core" > "$LIST_FILE"
echo "mate-utils" >> "$LIST_FILE"
echo "mate-control-center" >> "$LIST_FILE"
echo "lightdm" >> "$LIST_FILE"
echo "network-manager-gnome" >> "$LIST_FILE"
echo "plymouth" >> "$LIST_FILE"
echo "plymouth-themes" >> "$LIST_FILE"
echo "firefox-esr" >> "$LIST_FILE"
echo "curl" >> "$LIST_FILE"
echo "wget" >> "$LIST_FILE"
echo "git" >> "$LIST_FILE"
echo "vim" >> "$LIST_FILE"
echo "nano" >> "$LIST_FILE"
echo "gparted" >> "$LIST_FILE"
echo "htop" >> "$LIST_FILE"
echo "fastfetch" >> "$LIST_FILE"
echo "pipewire" >> "$LIST_FILE"
echo "wireplumber" >> "$LIST_FILE"
echo "pavucontrol" >> "$LIST_FILE"
echo "python3" >> "$LIST_FILE"
echo "python3-gi" >> "$LIST_FILE"
echo "python3-cairo" >> "$LIST_FILE"
echo "gir1.2-gtk-3.0" >> "$LIST_FILE"
echo "libglib2.0-bin" >> "$LIST_FILE"

# --- ASSETS & SCRIPTS ---
log_info "Injecting assets..."
CHROOT="config/includes.chroot"
mkdir -p "${CHROOT}/usr/share/backgrounds/furryos"
mkdir -p "${CHROOT}/usr/share/sounds/furryos"
mkdir -p "${CHROOT}/usr/share/icons/furryos"
mkdir -p "${CHROOT}/usr/share/pixmaps"
mkdir -p "${CHROOT}/usr/share/plymouth/themes/furryos"
mkdir -p "${CHROOT}/usr/share/furryos/lore"
mkdir -p "${CHROOT}/usr/local/bin"
mkdir -p "${CHROOT}/etc/skel/Desktop"
mkdir -p "${CHROOT}/etc/skel/Pictures"
mkdir -p "${CHROOT}/etc/skel/Music/FurryOS_Soundtrack"
mkdir -p "${CHROOT}/etc/skel/Documents/FurryOS_Guides"
mkdir -p "${CHROOT}/etc/skel/Documents/FurryOS_Lore"
mkdir -p "${CHROOT}/etc/xdg/autostart"
mkdir -p "${CHROOT}/usr/share/applications"

# Copy assets with logging
if [ -d "assets/wallpapers" ]; then rsync -a assets/wallpapers/ "${CHROOT}/usr/share/backgrounds/furryos/"; log_info "Copied wallpapers"; fi
if [ -d "assets/sounds" ]; then rsync -a assets/sounds/ "${CHROOT}/usr/share/sounds/furryos/"; rsync -a assets/sounds/ "${CHROOT}/etc/skel/Music/FurryOS_Soundtrack/"; log_info "Copied sounds and music"; fi
if [ -d "assets/images" ]; then rsync -a assets/images/ "${CHROOT}/etc/skel/Pictures/"; log_info "Copied images to Pictures"; fi
if [ -d "assets/icons" ]; then rsync -a assets/icons/ "${CHROOT}/usr/share/icons/furryos/"; find assets/icons -name "*.png" -exec cp {} "${CHROOT}/usr/share/pixmaps/" \; 2>/dev/null || true; log_info "Copied icons"; fi
if [ -d "assets/splash" ]; then rsync -a assets/splash/ "${CHROOT}/usr/share/plymouth/themes/furryos/"; log_info "Copied splash theme"; fi
if [ -d "assets/documents" ]; then rsync -a assets/documents/ "${CHROOT}/etc/skel/Documents/FurryOS_Guides/"; log_info "Copied documents/guides"; fi
if [ -d "assets/lore" ]; then rsync -a assets/lore/ "${CHROOT}/usr/share/furryos/lore/"; rsync -a assets/lore/ "${CHROOT}/etc/skel/Documents/FurryOS_Lore/"; log_info "Copied lore"; fi

# --- SCRIPT 1: Startup Sound ---
STARTUP_FILE="${CHROOT}/etc/xdg/autostart/furryos-startup-sound.desktop"
echo "[Desktop Entry]" > "$STARTUP_FILE"
echo "Type=Application" >> "$STARTUP_FILE"
echo "Name=FurryOS Startup Sound" >> "$STARTUP_FILE"
echo "Exec=mpg123 /usr/share/sounds/furryos/startup.mp3" >> "$STARTUP_FILE"
echo "Terminal=false" >> "$STARTUP_FILE"
echo "NoDisplay=true" >> "$STARTUP_FILE"
echo "X-GNOME-Autostart-enabled=true" >> "$STARTUP_FILE"
log_info "Injected startup sound (mpg123 optional via apt/Gamer Mode)"

# --- SCRIPT 2: Live Border (Python) - FULLY RESTORED ---
BORDER_FILE="${CHROOT}/usr/local/bin/furryos-live-border"
echo '#!/usr/bin/env python3' > "$BORDER_FILE"
echo 'import gi' >> "$BORDER_FILE"
echo 'import cairo' >> "$BORDER_FILE"
echo 'import os' >> "$BORDER_FILE"
echo "gi.require_version('Gtk', '3.0')" >> "$BORDER_FILE"
echo 'from gi.repository import Gtk, Gdk, GLib' >> "$BORDER_FILE"
echo '' >> "$BORDER_FILE"
echo 'class LiveBorder(Gtk.Window):' >> "$BORDER_FILE"
echo '    def __init__(self):' >> "$BORDER_FILE"
echo '        super().__init__()' >> "$BORDER_FILE"
echo '        if not os.path.exists("/lib/live/mount/pending") and not os.path.exists("/lib/live/mount/mounted"): exit(0)' >> "$BORDER_FILE"  # Improved live detection
echo '        self.set_title("FurryOS Live")' >> "$BORDER_FILE"
echo '        self.set_decorated(False)' >> "$BORDER_FILE"
echo '        self.set_keep_above(True)' >> "$BORDER_FILE"
echo '        self.set_app_paintable(True)' >> "$BORDER_FILE"
echo '        self.set_accept_focus(False)' >> "$BORDER_FILE"
echo '        self.set_skip_taskbar_hint(True)' >> "$BORDER_FILE"
echo '        self.set_skip_pager_hint(True)' >> "$BORDER_FILE"
echo '        screen = self.get_screen()' >> "$BORDER_FILE"
echo '        visual = screen.get_rgba_visual()' >> "$BORDER_FILE"
echo '        if visual and screen.is_composited():' >> "$BORDER_FILE"
echo '            self.set_visual(visual)' >> "$BORDER_FILE"
echo '        monitor = Gdk.Display.get_default().get_primary_monitor()' >> "$BORDER_FILE"
echo '        geo = monitor.get_geometry()' >> "$BORDER_FILE"
echo '        self.set_default_size(geo.width, geo.height)' >> "$BORDER_FILE"
echo '        self.move(0, 0)' >> "$BORDER_FILE"
echo '        self.alpha = 1.0' >> "$BORDER_FILE"
echo '        self.fade = -0.05' >> "$BORDER_FILE"
echo '        self.connect("draw", self.on_draw)' >> "$BORDER_FILE"
echo '        GLib.timeout_add(100, self.animate)' >> "$BORDER_FILE"
echo '        self.show_all()' >> "$BORDER_FILE"
echo '' >> "$BORDER_FILE"
echo '    def animate(self):' >> "$BORDER_FILE"
echo '        self.alpha += self.fade' >> "$BORDER_FILE"
echo '        if self.alpha <= 0.4:' >> "$BORDER_FILE"
echo '            self.fade = 0.05' >> "$BORDER_FILE"
echo '        elif self.alpha >= 0.9:' >> "$BORDER_FILE"
echo '            self.fade = -0.05' >> "$BORDER_FILE"
echo '        self.queue_draw()' >> "$BORDER_FILE"
echo '        return True' >> "$BORDER_FILE"
echo '' >> "$BORDER_FILE"
echo '    def on_draw(self, widget, cr):' >> "$BORDER_FILE"
echo '        w, h = widget.get_allocated_width(), widget.get_allocated_height()' >> "$BORDER_FILE"
echo '        cr.set_source_rgba(1.0, 0.42, 0.21, self.alpha)  # Orange pulse' >> "$BORDER_FILE"
echo '        cr.set_line_width(8)' >> "$BORDER_FILE"
echo '        cr.rectangle(0, 0, w, h)' >> "$BORDER_FILE"
echo '        cr.stroke()' >> "$BORDER_FILE"
echo '        text = "🐾 LIVE MODE 🐾"' >> "$BORDER_FILE"
echo '        cr.select_font_face("Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD)' >> "$BORDER_FILE"
echo '        cr.set_font_size(16)' >> "$BORDER_FILE"
echo '        ext = cr.text_extents(text)' >> "$BORDER_FILE"
echo '        cr.set_source_rgba(0, 0, 0, 0.8)' >> "$BORDER_FILE"
echo '        cr.rectangle((w/2) - (ext.width/2) - 10, 0, ext.width + 20, ext.height + 20)' >> "$BORDER_FILE"
echo '        cr.fill()' >> "$BORDER_FILE"
echo '        cr.set_source_rgba(1, 1, 1, 1)' >> "$BORDER_FILE"
echo '        cr.move_to((w/2) - (ext.width/2), ext.height + 5)' >> "$BORDER_FILE"
echo '        cr.show_text(text)' >> "$BORDER_FILE"
echo '' >> "$BORDER_FILE"
echo 'if __name__ == "__main__":' >> "$BORDER_FILE"
echo '    app = LiveBorder()' >> "$BORDER_FILE"
echo '    Gtk.main()' >> "$BORDER_FILE"

chmod +x "$BORDER_FILE"

# Live Border Autostart
BORDER_AUTO="${CHROOT}/etc/xdg/autostart/furryos-live-border.desktop"
echo "[Desktop Entry]" > "$BORDER_AUTO"
echo "Type=Application" >> "$BORDER_AUTO"
echo "Name=FurryOS Live Border" >> "$BORDER_AUTO"
echo "Exec=/usr/local/bin/furryos-live-border" >> "$BORDER_AUTO"
echo "Terminal=false" >> "$BORDER_AUTO"
echo "NoDisplay=true" >> "$BORDER_AUTO"
echo "X-GNOME-Autostart-enabled=true" >> "$BORDER_AUTO"
log_info "Injected animated live border (fixed!)"

# --- SCRIPT 3: Mode Installer (Python) ---
INSTALLER_FILE="${CHROOT}/usr/local/bin/furryos-mode-installer"
echo '#!/usr/bin/env python3' > "$INSTALLER_FILE"
echo 'import gi, os, subprocess' >> "$INSTALLER_FILE"
echo "gi.require_version('Gtk', '3.0')" >> "$INSTALLER_FILE"
echo 'from gi.repository import Gtk' >> "$INSTALLER_FILE"
echo '' >> "$INSTALLER_FILE"
echo 'class ModeInstaller(Gtk.Window):' >> "$INSTALLER_FILE"
echo '    def __init__(self):' >> "$INSTALLER_FILE"
echo '        super().__init__(title="FurryOS Mode Installer")' >> "$INSTALLER_FILE"
echo '        self.set_border_width(15)' >> "$INSTALLER_FILE"
echo '        self.set_default_size(450, 400)' >> "$INSTALLER_FILE"
echo '        self.set_position(Gtk.WindowPosition.CENTER)' >> "$INSTALLER_FILE"
echo '        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)' >> "$INSTALLER_FILE"
echo '        self.add(vbox)' >> "$INSTALLER_FILE"
echo '        lbl = Gtk.Label()' >> "$INSTALLER_FILE"
echo "        lbl.set_markup(\"<span size='x-large' weight='bold'>Choose Your Path 🐾</span>\")" >> "$INSTALLER_FILE"
echo '        vbox.pack_start(lbl, False, False, 10)' >> "$INSTALLER_FILE"
echo '        modes = [' >> "$INSTALLER_FILE"
echo '            ("👵 Granny Mode", "Simple games & accessibility.", "gnome-games aisleriot gnome-accessibility-themes"),' >> "$INSTALLER_FILE"
echo '            ("🎮 Gamer Mode", "Steam, Lutris, GameMode + media (VLC/ffmpeg/mpg123).", "steam-installer lutris gamemode mangohud vlc ffmpeg mpg123"),' >> "$INSTALLER_FILE"
echo '            ("💻 Hacker Mode", "VSCode, Docker, dev tools.", "git build-essential docker.io code"),' >> "$INSTALLER_FILE"
echo '            ("👻 Paranoid Mode", "Tor, firewall, privacy.", "tor onionshare ufw"),' >> "$INSTALLER_FILE"
echo '        ]' >> "$INSTALLER_FILE"
echo '        for name, desc, pkgs in modes:' >> "$INSTALLER_FILE"
echo '            btn = Gtk.Button()' >> "$INSTALLER_FILE"
echo '            b_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=2)' >> "$INSTALLER_FILE"
echo '            l_n = Gtk.Label(); l_n.set_markup(f"<b>{name}</b>")' >> "$INSTALLER_FILE"
echo '            l_d = Gtk.Label(label=desc); l_d.set_line_wrap(True)' >> "$INSTALLER_FILE"
echo '            b_box.pack_start(l_n, True, True, 0)' >> "$INSTALLER_FILE"
echo '            b_box.pack_start(l_d, True, True, 0)' >> "$INSTALLER_FILE"
echo '            btn.add(b_box)' >> "$INSTALLER_FILE"
echo '            btn.connect("clicked", self.install, name, pkgs)' >> "$INSTALLER_FILE"
echo '            vbox.pack_start(btn, True, True, 5)' >> "$INSTALLER_FILE"
echo '' >> "$INSTALLER_FILE"
echo '    def install(self, widget, mode_name, packages):' >> "$INSTALLER_FILE"
echo '        confirm = Gtk.MessageDialog(self, 0, Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, f"Install {mode_name}?")' >> "$INSTALLER_FILE"
echo '        confirm.format_secondary_text("Internet required. This adds the selected packages.")' >> "$INSTALLER_FILE"
echo '        response = confirm.run()' >> "$INSTALLER_FILE"
echo '        confirm.destroy()' >> "$INSTALLER_FILE"
echo '        if response == Gtk.ResponseType.YES:' >> "$INSTALLER_FILE"
echo '            cmd = f"bash -c \\"sudo apt update && sudo apt install -y {packages}; echo Done! Press Enter.; read\\""' >> "$INSTALLER_FILE"
echo '            subprocess.Popen(["mate-terminal", "-e", cmd])' >> "$INSTALLER_FILE"
echo '' >> "$INSTALLER_FILE"
echo 'win = ModeInstaller()' >> "$INSTALLER_FILE"
echo 'win.connect("destroy", Gtk.main_quit)' >> "$INSTALLER_FILE"
echo 'win.show_all()' >> "$INSTALLER_FILE"
echo 'Gtk.main()' >> "$INSTALLER_FILE"

chmod +x "$INSTALLER_FILE"

APP_DESKTOP="${CHROOT}/usr/share/applications/furryos-mode-installer.desktop"
echo "[Desktop Entry]" > "$APP_DESKTOP"
echo "Version=1.0" >> "$APP_DESKTOP"
echo "Type=Application" >> "$APP_DESKTOP"
echo "Name=Install Modes (Granny/Gamer/Hacker/Paranoid)" >> "$APP_DESKTOP"
echo "Comment=Customize your FurryOS experience" >> "$APP_DESKTOP"
echo "Exec=/usr/local/bin/furryos-mode-installer" >> "$APP_DESKTOP"
echo "Icon=system-software-install" >> "$APP_DESKTOP"
echo "Terminal=false" >> "$APP_DESKTOP"
echo "Categories=System;" >> "$APP_DESKTOP"

cp "$APP_DESKTOP" "${CHROOT}/etc/skel/Desktop/"
chmod +x "${CHROOT}/etc/skel/Desktop/furryos-mode-installer.desktop"
log_info "Injected mode installer"

# --- BUILD ---
log_info "Starting Build..."
lb build 2>&1 | tee -a "$BUILD_LOG"

# --- FINALIZE ---
log_info "Finalizing..."
ISO_NAME="${OS_NAME}-${VERSION}-${ARCH}.iso"
mkdir -p "$BUILD_OUTPUT_DIR"
if [ -f "live-image-${ARCH}.hybrid.iso" ]; then
    mv "live-image-${ARCH}.hybrid.iso" "$BUILD_OUTPUT_DIR/$ISO_NAME"
    log_success "ISO Created: $BUILD_OUTPUT_DIR/$ISO_NAME"
    cd "$BUILD_OUTPUT_DIR"
    sha256sum "$ISO_NAME" > "${ISO_NAME}.sha256"
    cd "$WORK_DIR"
fi

mv chroot binary cache .build "$PARENT_DIR/" 2>/dev/null || true

# --- BACKUP SOURCE CODE ---
log_info "Backing up source code to $BACKUP_DIR..."
mkdir -p "$BACKUP_DIR"
rsync -a --delete \
    --exclude 'chroot' --exclude 'binary' --exclude 'cache' --exclude '.build' \
    --exclude '.git' --exclude '*.iso' --exclude 'FurryOS-Builds' \
    "$WORK_DIR/" "$BACKUP_DIR/"
chown -R "$REAL_USER:$REAL_USER" "$BACKUP_DIR"

log_success "Build complete! Boot it up and watch that border glow—you're making magic! 🐾✨"
